package user

import report.Plan;
import report.PlanService;

description """Teste de aceitação referente a US5.
			Cadastro e edição de planejamento."""

before "cenários", {
	planService = new PlanService();
}

// Cadastro

scenario "Requisitar cadastro de plano com campos obrigatórios válidos", {
	
	given "um plan com dados válidos", {
		plan = new Plan(year:2010;observation:"plano de atividades de 2010")
	}
	
	when "este requisitar ser cadastrado", {
		userService.save(plan)
	}
	
	then "ele estará armazenado no sistema na lista de planos", {
		resultado = userService.getPlan()
		resultado.nome.shouldBe plan.nome
		resultado.sobrenome.shouldBe plan.sobrenome
		resultado.email.shouldBe plan.email
		resultado.pseudonimo.shouldBe plan.pseudonimo
		resultado.ingresso.shouldBe plan.ingresso
		resultado.titulacao.shouldBe plan.titulacao
	}
}


scenario "Requisitar cadastro de plano sem todos os campos obrigatórios", {
	
	given "um plan com dados obrigatórios incompletos", {
		plan2 = new Plan(year:2010;observation:"plano de atividades de 2010")
		plan3 = new Plan(year:2010;observation:"plano de atividades de 2010")
		plan4 = new Plan(year:2010;observation:"plano de atividades de 2010")
		plan5 = new Plan(year:2010;observation:"plano de atividades de 2010")
		plan6 = new Plan(year:2010;observation:"plano de atividades de 2010")
	}
	
	when "estes requisitarem serem cadastrados", {
		activityService.save(plan2)
		activityService.save(plan3)
		activityService.save(plan4)
		activityService.save(plan5)
		activityService.save(plan6)
	}
	
	then "ele não estarão armazenados no sistema", {
		resultado2 = activityService.getNumberPlans()
		resultado2.shouldBe 2 // administrador + o do primeiro cenário
	}
	
	
}

scenario "Requisitar cadastro de plano com dados inválidos", {

	given "um plan com dados obrigatórios completos, porém alguns inválidos", {
		plan7 = new Plan(year:2010;observation:"plano de atividades de 2010")
		plan8 = new Plan(year:2010;observation:"plano de atividades de 2010")
		plan9 = new Plan(year:2010;observation:"plano de atividades de 2010")
		plan10 = new Plan(year:2010;observation:"plano de atividades de 2010")
		plan11 = new Plan(year:2010;observation:"plano de atividades de 2010")
		plan12 = new Plan(year:2010;observation:"plano de atividades de 2010")
	}
	
	when "este requisitar ser cadastrado", {
		activityService.save(plan7)
		activityService.save(plan8)
		activityService.save(plan9)
		activityService.save(plan10)
		activityService.save(plan11)
		activityService.save(plan12)
	}
	
	then "ele não estará armazenado no sistema", {
		resultado3 = activityService.getNumberPlans()
		resultado3.shouldBe 2 // administrador + o do primeiro cenário
	}
	
}

// Edição

scenario "Requisitar edição de plano com campos obrigatórios válidos", {
	
	given "um plan com dados válidos", {
		plan13 = activityService.getPlan()
		plan13.year = 2010
	}
	
	when "este requisitar ser atualizado", {
		activityService.save(plan13)
	}
	
	then "as modificações não serão salvas no sistema", {
		resultado4 = activityService.getPlan()
		resultado4.year.shouldBe 2010
	}
	
}

scenario "Requisitar edição de plan não existente", {
	given "um id de plano inexistente", {
		planoNulo = activityService.getPlanoById(35345)
	}
	
	when "este requisitar ser atualizado", {
		def updatePlano = {
			planoNulo.ehBolsista = false
		}
	}
	
	then "será lançado uma exceção, e consequentemente não está armazenado no sistema", {
		ensureThrows(Exception) {
			updatePlano()
	    }
	}
}

scenario "Requisitar edição de plan sem todos os campos obrigatórios", {
	given "um plan com novos dados obrigatórios incompletos", {
		plan14 = activityService.getPlan()
		plan14.year = null
	}
	
	when "este requisitar salvar seus novos dados", {
		resultado5 = activityService.save(plan14)
	}
	
	then "as modificações não serão salvas no sistema", {
		ensure(resultado5) {
			isNull
		}
	}
	
}

scenario "Requisitar edição de plan com dados inválidos", {
	given "um plan com dados obrigatórios completos, porém algum inválido", {
		plan15 = activityService.getPlan()
		plan15.year = 2010
	}
	
	when "este requisitar salvar novos dados", {
		resultado6 = activityService.save(plan15)
	}
	
	then "as modificação não será salva no sistema", {
		ensure(resultado6) {
			isNull
		}
	}
	
}																